package Pong;

import javax.swing.*;
import java.awt.*;
import java.awt.event.MouseEvent;
import java.awt.event.MouseMotionListener;

public class TekenPaneel extends JPanel implements Runnable, MouseMotionListener{
	
	private static final long serialVersionUID = 1L; //automatisch geplaatst door Eclipse, anders warning
	
	int xpos; //de xpos van de muis
	int balx; //de xpos van de bal
	int baly; //de ypos van de bal
	int[] xpossen = new int[2]; //De array met de gekregen xpossen van de clienten om op het paneel te tekenen
	boolean running = false; //Een flag om het spel te laten tekenen of niet wanneer het gestart is
	
	public TekenPaneel(){
		this.addMouseMotionListener(this); //het volledig tekenpaneel als MouseMotionListener instellen zodat de positie van de muis gekend is
		this.setBackground(Color.DARK_GRAY);
	}
	
	public void setXpos(int[] xpossen) {
		this.xpossen = xpossen; //Dit zal een array zijn van 2 plaatsen waar de xpossen van de twee clienten inzitten
	}

	public int getXpos() {
		return xpos; //Als de client dit oproept zal hij de x coordinaat van de huidige speler krijgen
	}
	
	public void setbalx(int i){
		balx = i;	//De client roept dit op en geeft de coordinaten van de bal die hij gekregen heeft hier door naar het tekenpaneel
	}
	
	public void setbaly(int i){
		baly = i;
	}
	
	public void paintComponent( Graphics g){
		super.paintComponent(g);
		g.setColor(Color.WHITE);
		g.translate(getBounds().width/2, getBounds().height/2); //Dit zet het center van het tekenpaneel in het midden
		g.fillRect(-350,-350,700,700); //Dit tekent een wit vierkant in het midden van het paneel van 700x700
		g.setColor(Color.RED);
		if(running){ //Er wordt enkel getekent als het spel gestart is
			g.fillRect(xpossen[0]-50, 340, 100, 10); //bordje van de eigen speler tekenen
			g.fillRect(xpossen[1]-50, -350, 100, 10);//bordje van de tegenstander tekenen
			g.setColor(Color.GREEN);		
			g.fillOval(balx, baly, 12, 12);		//De binnenkant van de bal in het groen tekenen
			g.setColor(Color.BLACK);
			g.drawOval(balx, baly, 12, 12);		//De bal een zwarte buitenrand geven
		}
	}
	
	public void start(){
		Thread thread = new Thread(this);	//Het paneel moet constant hertekent worden, dus dit is een thread
		thread.start();						//De thread wordt gestart en de run-methode wordt opgeroepen
	}
	
	public void run(){
		running = true;
		while(running){
			repaint();	//constant hertekenen
		}
	}

	@Override
	public void mouseDragged(MouseEvent e) {
		xpos = e.getX()-(getBounds().width/2); //De positie van de muis opvragen tijdens het slepen van de muis (linkerknop ingedrukt houden)
		if (xpos < -300) {
			xpos = -300;
		}
		if (xpos > 300) {
			xpos = 300;
		}

	}

	@Override
	public void mouseMoved(MouseEvent e) {
		xpos = e.getX()-(getBounds().width/2); //De positie van de muis opvragen tijdens het bewegen van de muis
		if (xpos < -300) {
			xpos = -300;
		}
		if (xpos > 300) {
			xpos = 300;
		}
		
	}
	
	public static void slaap(int mSec) {
		try {
			Thread.currentThread().sleep(mSec);
		} catch (InterruptedException e) {
			e.printStackTrace();
		}
	}
	
}